package com.newtouch.bxzs.common.base.util;

import com.newtouch.bxzs.common.base.BaseErrorEnum;
import com.newtouch.bxzs.common.base.BaseException;
import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

import java.util.Collection;
import java.util.Map;

/**
 * Assert: 断言工具类
 *
 * <p>
 * <b>History:</b>
 * <table border="1">
 * <tr>
 * <th>Date</th>
 * <th>Operator</th>
 * <th>Memo</th>
 * </tr>
 * <tr>
 * <td>2021/1/5 10:11</td>
 * <td>Amour</td>
 * <td>Create</td>
 * </tr>
 * </table>
 *
 * @author tianshangzhu
 * @version 1.0.0
 * @since 1.0.0
 */
public class Assert {
  private Assert() {
  }

  /**
   * 为真
   *
   * @param expression 判断条件
   * @param message    expression = false，抛出异常信息
   */
  public static void isTrue(boolean expression, String message) {
    if (!expression) {
      throw new BaseException(message);
    }
  }

  /**
   * 为真
   *
   * @param expression 判断条件
   * @param message    expression = false，抛出异常信息
   */
  public static void isTrue(boolean expression, String code, String message) {
    if (!expression) {
      throw new BaseException(code, message);
    }
  }

  /**
   * 为假
   *
   * @param expression 判断条件
   * @param message    expression = true，抛出异常信息
   */
  public static void isFalse(boolean expression, String message) {
    if (expression) {
      throw new BaseException(message);
    }
  }

  /**
   * 为假
   *
   * @param expression 判断条件
   * @param message    expression = true，抛出异常信息
   */
  public static void isFalse(boolean expression, String code, String message) {
    if (expression) {
      throw new BaseException(code, message);
    }
  }

  /**
   * 为空
   *
   * @param object  判断对象
   * @param message 不为空抛出异常信息
   */
  public static void isNull(Object object, String message) {
    if (object != null) {
      throw new BaseException(message);
    }
  }

  /**
   * 为空
   *
   * @param object  判断对象
   * @param message 不为空抛出异常信息
   */
  public static void isNull(Object object, String code, String message) {
    if (object != null) {
      throw new BaseException(code, message);
    }
  }

  /**
   * 不为空
   *
   * @param object  判断对象
   * @param message 为空抛出异常信息
   */
  public static void notNull(Object object, String message) {
    if (object == null) {
      throw new BaseException(message);
    }
  }

  public static void notEmpty(Object object, String message) {
    if (ObjectUtils.isEmpty(object)) {
      throw new BaseException(BaseErrorEnum.REQUEST_DATA_NULL.getResultCode(),message);
    }
  }

  /**
   * 不为空
   *
   * @param object  判断对象
   * @param message 为空抛出异常信息
   */
  public static void notNull(Object object, String code, String message) {
    if (object == null) {
      throw new BaseException(code, message);
    }
  }


  /**
   * 数组不为空
   *
   * @param array   数组
   * @param message 为空抛出异常
   */
  public static void notEmpty(Object[] array, String message) {
    if (ObjectUtils.isEmpty(array)) {
      throw new BaseException(BaseErrorEnum.REQUEST_DATA_NULL.getResultCode(),message);
    }
  }

  /**
   * 数组不为空
   *
   * @param array   数组
   * @param message 为空抛出异常
   */
  public static void notEmpty(Object[] array, String code, String message) {
    if (ObjectUtils.isEmpty(array)) {
      throw new BaseException(code, message);
    }
  }

  /**
   * 没有空对象
   *
   * @param array   数组
   * @param message 包含空对象抛出异常
   */
  public static void noNullElements(Object[] array, String message) {
    if (array != null) {
      for (Object element : array) {
        if (element == null) {
          throw new BaseException(message);
        }
      }
    }
  }

  /**
   * 没有空对象
   *
   * @param array   数组
   * @param message 包含空对象抛出异常
   */
  public static void noNullElements(Object[] array, String code, String message) {
    if (array != null) {
      for (Object element : array) {
        if (element == null) {
          throw new BaseException(code, message);
        }
      }
    }
  }

  /**
   * 不为空
   *
   * @param collection 集合
   * @param message    为空抛出异常
   */
  public static void notEmpty(Collection<?> collection, String message) {
    if (CollectionUtils.isEmpty(collection)) {
      throw new BaseException(BaseErrorEnum.REQUEST_DATA_NULL.getResultCode(),message);
    }
  }

  /**
   * 不为空
   *
   * @param collection 集合
   * @param message    为空抛出异常
   */
  public static void notEmpty(Collection<?> collection, String code, String message) {
    if (CollectionUtils.isEmpty(collection)) {
      throw new BaseException(code, message);
    }
  }

  /**
   * map不为空
   *
   * @param map     hash表
   * @param message 为空抛出异常
   */
  public static void notEmpty(Map<?, ?> map, String message) {
    if (CollectionUtils.isEmpty(map)) {
      throw new BaseException(message);
    }
  }

  /**
   * map不为空
   *
   * @param map     hash表
   * @param message 为空抛出异常
   */
  public static void notEmpty(Map<?, ?> map, String code, String message) {
    if (CollectionUtils.isEmpty(map)) {
      throw new BaseException(code, message);
    }
  }
}
